package com.memento.demo4.main;

import com.memento.demo4.Caretaker;
import com.memento.demo4.Originator;

/**
 * 多重检查点
 * 
 * 前面所给出的白箱和黑箱的示意性实现都是只存储一个状态的简单实现，也可以叫做只有一个检查点。常见的系统往往需要存储不止一个状态，而是需要存储多个状态，
 * 或者叫做有多个检查点。
 * 
 * 备忘录模式可以将发起人对象的状态存储到备忘录对象里面，备忘录模式可以将发起人对象恢复到备忘录对象所存储的某一个检查点上。下面给出一个示意性的、
 * 有多重检查点的备忘录模式的实现。
 * 
 * @author dell
 * 
 */
public class Client {

	public static void main(String[] args) {

		Originator o = new Originator();
		Caretaker c = new Caretaker();
		// 改变状态
		o.setState("state 0");
		// 创建备忘录对象，并将发起人对象的状态储存起来
		c.saveMemento(o.createMemento());
		System.out.println("----------------------------------");
		// 改变状态
		o.setState("state 1");
		c.saveMemento(o.createMemento());
		System.out.println("----------------------------------");
		// 改变状态
		o.setState("state 2");
		c.saveMemento(o.createMemento());
		System.out.println("----------------------------------");
		// 改变状态
		o.setState("state 3");
		c.saveMemento(o.createMemento());
		System.out.println("-----------------恢复检查点-----------------");
		o.restoreMemento(c.restoreMemento(1));
		System.out.println(o.getState());
		o.restoreMemento(c.restoreMemento(2));
		System.out.println(o.getState());
	}

}
